Skip to content

Add perl 5.12.1 v3 #113

Merged
merged 19 commits into from
Apr 27, 2020
Merged

Add perl 5.12.1 v3 #113

merged 19 commits into from
Apr 27, 2020

Conversation

donald
Copy link
Contributor

@donald donald commented Apr 26, 2020

The last time we tried to remove the ancient perl 5.12.1 from /usr/local and use a more current one via the package system, we run into a few problems, see mariux64/bee-files#1419 . One problem is a change in the perl syntax and one important failing user is twiki/foswiki.

Although we might be able to update foswiki (lot work!), there might be other yet unidentified users with similar problems.

So before trying to remove perl 5.12.1 from /usr/local again, we should have a perl 5.12.1 package ready as a potential substitute for software which doesn't work with newer perl packages.

It turned out, that this old perl version fails it selftests when translated with a current gcc. This is most probably probably an error in den perl code with undefined behavior. So a package for the gcc version, which was original used to compile the perl in /usr/local, is also part of this PR. And if this wasn't fun enough, this old gcc requires an older version of texinfo, so this is the third package in this PR.

Add package build script from TEMPLATE.sh for a very old version of texinfo.

Required to build ancient gcc version.
Create build script with

    cp gcc-9.2.0-0.build.sh gcc-4.5.1-0.build.sh

and update version number.
This version of GCC has .texi files that are incompatible with
the current version of texinfo.

Use older version of texinfo.
We have unclear compile errors with libmudflap. This is only needed for
certain instrumentation options. Disabled.
We have two failing checks remaining:

    FAIL: gcc.c-torture/compile/limits-exprparen.c
    FAIL: gcc.dg/cpp/trad/include.c

The first one is a construct with excessive brackets:

    #define LBR1 ( ( ( ( ( ( ( ( ( (
    #define LBR2 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1 LBR1
    #define LBR3 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2 LBR2
    #define LBR4 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3 LBR3
    ...

This is not something we'd expect in the real world. The other one
probably has an issue with the current glibc:

    #define __STDC__ 1              /* Stop complaints about non-ISO compilers.  */
    #define stdlib 1
    #include <stdlib.h>             /* { dg-bogus "o such file or directory" } */

The test is about whether macros inside '#include <' and '>' are
expanded. This is also something we don't really care about.

So we decided not to track these down. Ignore the failing tests instead.
Parallel install seems to mess to. Disable MAKEFLAGS="-j .." for make
install.
Remove post-install commands, which we don't need for this version to
avoid

    + rm -v 'lib64/*-gdb.py'
    rm: cannot remove 'lib64/*-gdb.py': No such file or directory
We want a perl version in /pkg which is identically to the
/usr/local/bin perl version we are going to remove.

Create file with

  cp perl-5.28.1-0.build.sh perl-5.12.1-0.build.sh

and update versions.
Avoid error

    ext/Errno/t/Errno..............................................FAILED--Further testing stopped: No errno's are exported
    make: *** [makefile:874: test] Error 29

by adding a fix from perl-5.18.2.
Add -Dusethreads to make configuration similar to the configuration
of /usr/local/bin/perl.
Compiling perl-5.12.1 with gcc-7.5.0 and -O2 fails for some tests:

    +op/range.t ........................................................ # Failed at op/range.t line 289
    +op/numconvert.t ................................................... Failed 12/1440 subtests

Theses test don't fail, however, with -O0. So it is assumed that the
perl code contains undefined behaviour which a more recent compiler uses
for optimizations.

The tests also succeed when perl is compiled with gcc 4.5.1 which was
used to create the perl installation in /usr/local.

We want best performance and maximal compatibility with the perl version
from /usr/local. Use the old gcc compiler.

We use the old gcc compiler only for perl itself, not for cpan modules.
Some of these required c++. Also the cpan modules are kept up to date
and bugs which surfaced by changes in the compiler are fixed.
This test fails:

    ok 1 - timelocal second for 1970 1 2 0 0 0
    ok 2 - timelocal minute for 1970 1 2 0 0 0
    ok 3 - timelocal hour for 1970 1 2 0 0 0
    ok 4 - timelocal day for 1970 1 2 0 0 0
    ok 5 - timelocal month for 1970 1 2 0 0 0
    not ok 6 - timelocal year for 1970 1 2 0 0 0
    #   Failed test 'timelocal year for 1970 1 2 0 0 0'
    #   at ext/Time-Local/t/Local.t line 97.
    #          got: '170'
    #     expected: '70'

which is probably caused by a Y2K fix in localtime() of glibc.

The test fails with the perlversion installed into /usr/local as well,
which is the version we want to be compatible with. So just remove this
test.
We removed Berekely DB from the system, but it is required here for the
BerkeleyDB perl module which is required for DB_File which is required
for bioperl. Install Berekeley DB into the package.
We have a single failed test for PDL because of missing "pngtopnm".
Disable tests for this module.
Avoid

    ZMUGHAL/Devel-IPerl-0.008.tar.gz requires perl '5.013002'; you have only 5.012001; giving up
This perl package should be a replacement for the perl installation in
/usr/local. We've compared the list of packages from /usr/local with
those installed into this package so far. Ignoring the huge amount of
packages in the Bio:: namespace, which are the result of chaotic
maintenance, ridiculous fragmentation and continuous reorganization the
following packages are missing:

    DateTime::TimeZone::Local::Win32
    File::ShareDir::ProjectDistDir
    LWP::Protocol::GHTTP
    LWP::Protocol::http10
    Net::SMTP::SSL
    Apache::SOAP
    Apache::XMLRPC::Lite
    DBI::FAQ
    DateTime::TimeZone::America::Godthab
    Mojolicious::Command::test
    Mojolicious::Plugin::PODRenderer
    PDL::Graphics::PGPLOT
    PDL::Graphics::PGPLOT::Window
    PDL::Graphics::PGPLOTOptions
    PPI::Exception::ParserTimeout
    Perl::Critic::Policy::Documentation::RequirePodLinksIncludeText
    Plack::Handler::HTTP::Server::Simple

From this list only Net::SMTP::SSL seems relevant, so add this package.
Sign in to join this conversation on GitHub.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant